package pe.edu.sistemas.samupg.domain.model;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "noticia", schema = "bd_samupg")
public class Noticia implements java.io.Serializable {

	private static final long serialVersionUID = 2912621600553070054L;
	
	private Float idNoticia;
	private Administrador creador;
	private String titulo;
	private String contenido;
	private Date fechaCreacion;
	private String rutaImagen;
	private Set<Comentario> comentarios = new HashSet<Comentario>(0);

	public Noticia() {
	}

	public Noticia(Administrador creador, String titulo,
			String contenido, Date fechaCreacion,
			String rutaImagen) {
		this.creador = creador;
		this.titulo = titulo;
		this.contenido = contenido;
		this.fechaCreacion = fechaCreacion;
		this.rutaImagen = rutaImagen;
	}

	public Noticia(Administrador creador, String titulo,
			String contenido, Date fechaCreacion,
			String rutaImagen, Set<Comentario> comentarios) {
		this.creador = creador;
		this.titulo = titulo;
		this.contenido = contenido;
		this.fechaCreacion = fechaCreacion;
		this.rutaImagen = rutaImagen;
		this.comentarios = comentarios;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "noticia_id", unique = true, nullable = false, precision = 12, scale = 0)
	public Float getIdNoticia() {
		return this.idNoticia;
	}

	public void setIdNoticia(Float noticiaId) {
		this.idNoticia = noticiaId;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "noticia_creador_id", nullable = false)
	public Administrador getCreador() {
		return this.creador;
	}

	public void setCreador(Administrador administrador) {
		this.creador = administrador;
	}

	@Column(name = "noticia_titulo", nullable = false)
	public String getTitulo() {
		return this.titulo;
	}

	public void setTitulo(String noticiaTitulo) {
		this.titulo = noticiaTitulo;
	}

	@Column(name = "noticia_contenido", nullable = false, length = 65535)
	public String getContenido() {
		return this.contenido;
	}

	public void setContenido(String noticiaContenido) {
		this.contenido = noticiaContenido;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "noticia_fecha_creacion", nullable = false, length = 19)
	public Date getFechaCreacion() {
		return this.fechaCreacion;
	}

	public void setFechaCreacion(Date noticiaFechaCreacion) {
		this.fechaCreacion = noticiaFechaCreacion;
	}

	@Column(name = "noticia_ruta_imagen", nullable = false)
	public String getRutaImagen() {
		return this.rutaImagen;
	}

	public void setRutaImagen(String noticiaRutaImagen) {
		this.rutaImagen = noticiaRutaImagen;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "noticia")
	public Set<Comentario> getComentarios() {
		return this.comentarios;
	}

	public void setComentarios(Set<Comentario> comentarios) {
		this.comentarios = comentarios;
	}
}
